# Audio startup and wallpaper persistence ## Audio `pepvoid-pipewire-launcher` now starts one supervisor per user runtime directory. An atomic file lock replaces the old directory lock and stale-lock deletion. Repeated XDG and window manager startup calls register their sessions with the same supervisor. The supervisor: - Lets PipeWire launch its configured WirePlumber and Pulse helpers first. - Recovers missing helpers and restarts owned daemons after crashes, with retry backoff instead of a tight restart loop. - Recognizes Void's `pipewire -c pipewire-pulse.conf` process correctly. - Checks the Pulse protocol with `pactl info`, rather than treating a leftover socket file as a healthy audio server. - Recovers an owned core that fails to create its socket or becomes unresponsive. - Tracks active session buses so a quick logout/login does not shut down the new session's sound. Recovered helpers use a current session bus. - Stops only its own process groups after all registered session buses close. Volumeicon waits for the audio server and WirePlumber before testing the ALSA mixer. Its launcher restarts it if a later device or server transition closes the applet, rather than giving up after a fixed number of startup attempts. Pavucontrol remains its mixer. User volumes, mute settings, selected outputs and WirePlumber state are preserved. The existing native PipeWire configuration follows the [Void Linux PipeWire setup](https://docs.voidlinux.org/config/media/pipewire.html). No system-wide audio daemon is added, and active server sockets are not deleted. Diagnostic commands: ```sh pepvoid-pipewire-launcher --status pactl info wpctl status tail -n 80 "$XDG_RUNTIME_DIR/pepvoid-audio.log" ``` `--status` returns zero when the server responds and the local PipeWire policy manager is present. `--wait` starts the supervisor and waits for readiness. ## Wallpaper Openbox, Qtile, Awesome, i3, bspwm, herbstluftwm, Fluxbox and IceWM use `pepvoid-wallpaper` as their single wallpaper owner. Nitrogen remains the graphical wallpaper selector; its saved configuration remains authoritative. At session startup, the helper restores the saved image and fit mode. It watches RandR geometry and rotation, saved settings, and image availability. Resolution changes trigger a repaint within the polling interval of approximately two seconds. It also detects an image becoming available after login. The helper creates the default only when the user's saved file is absent. Malformed or partially written settings do not replace the current image. Fallback rendering uses the saved image when possible and does not generate a competing `.fehbg` file. A missing image uses the brand fallback until the image becomes available again. Default settings use Nitrogen's `xin_-1` group with proportional zoom-fill. Hardcoded `:0.0` and `:0.1` display entries have been removed from the defaults. Awesome no longer paints its fixed theme wallpaper over the user's choice, and i3 reloads no longer paint the brand image before restoring preferences. The watcher is locked per X display and exits when that display closes. Traditional desktops, Enlightenment and Wayland sessions retain their native wallpaper managers and persistence mechanisms. The X11 helper does not run inside Wayland sessions. Manual restore: ```sh pepvoid-wallpaper --restore ``` ## Validation and rollout Native PipeWire, WirePlumber and Pulse tests use private runtime directories and D-Bus sessions, including concurrent starts, controlled crashes and playback through a virtual sink. Wallpaper tests use isolated Xvfb/Xephyr displays and native Nitrogen, exercising selection changes, an 800x600 to 1100x700 resize, helper restart and display shutdown. These changes are in the image builder and apply to newly built images. They do not modify an already running VirtualBox guest. Physical audio devices, saved hardware routing and actual reboot/logout behavior still need verification in the target VM or installed system. No complete ISO was built for this change.